package vista.configuration;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;


import modelo.individuos.IndividualProfile;

import controlador.Controlador;

public class SelectionGUI extends JFrame {

	private JLabel ltipoIndividuos;
	private JLabel lnumIndividuos;
	private JLabel lopciones;
	private JComboBox ctipoIndividuos;
	private JComboBox copciones;
	private JSpinner numIndividuos;
	private SpinnerNumberModel modeloIndividuos;
	private JButton siguiente;
	private JButton atras;
	private JPanel central;
	private JPanel sur;
	private NextListener oyenteSiguiente;
	private BackListener oyenteAtras;
	private OptionComboListener oyenteOpcion;
	
	private Controlador controlador;
	
	private static SelectionGUI frame;
	
	public static SelectionGUI getSelectionGUI(Controlador control) {
		
		frame = new SelectionGUI(control);
		return frame;
	}
	
	public SelectionGUI(Controlador control) {
		
		super("Participantes de la simulacion");
		setLayout(new BorderLayout());
		controlador = control;
		central = new JPanel();
		central.setLayout(new FlowLayout(FlowLayout.CENTER));
		sur = new JPanel();
		sur.setLayout(new GridLayout(1,4));
		initcomponents();
		addcomponents();
		addListeners();
		setSize(450,160);
		setResizable(false);
		setVisible(true);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	}
	
	public void initcomponents() {
		
		ltipoIndividuos = new JLabel("Seleccione el tipo de los participantes:  ");
		lnumIndividuos = new JLabel("Seleccione el numero de participantes:                     ");
		lopciones = new JLabel("Seleccione la opcion de configuracion: ");
		ctipoIndividuos = new JComboBox();
		ctipoIndividuos.addItem("Conductores");
		ctipoIndividuos.addItem("Peatones");
		copciones = new JComboBox();
		copciones.addItem("Aleatorios    ");
		copciones.addItem("Excluir tipo  ");
		copciones.addItem("Incluir tipo  ");
		modeloIndividuos = new SpinnerNumberModel(1,1,200,1);
		numIndividuos = new JSpinner(modeloIndividuos);
		siguiente = new JButton("Siguiente");
		atras = new JButton("Atras");
	}
	
	public void addcomponents() {
		
		central.add(ltipoIndividuos);
		central.add(ctipoIndividuos);
		central.add(lopciones);
		central.add(copciones);
		central.add(lnumIndividuos);
		central.add(numIndividuos);
		sur.add(atras);
		sur.add(new JPanel());
		sur.add(siguiente);
		add(central,BorderLayout.CENTER);
		add(sur,BorderLayout.SOUTH);
	}
	
	public void addListeners() {
		
		oyenteSiguiente = new NextListener();
		oyenteAtras = new BackListener();
		oyenteOpcion = new OptionComboListener();
		siguiente.addActionListener(oyenteSiguiente);
		atras.addActionListener(oyenteAtras);
		copciones.addActionListener(oyenteOpcion);
	}
	
	public Integer getNumIndividuos() {
		
		return (Integer)numIndividuos.getValue();
	}
	
	public Integer getTipoIndividuos() {
		
		return ctipoIndividuos.getSelectedIndex();
	}
	
	public Integer getOpcion() {
		
		return copciones.getSelectedIndex();
	}
	
	class NextListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
		
			Integer opcion = getOpcion();
			if (opcion == 0) {
				dispose();
				controlador.configurarAgentes(getTipoIndividuos(),getNumIndividuos(),null,opcion);
				controlador.actualizarTabla();
			}
			else {
				dispose();
				ConfigurationGUI configuracion = new ConfigurationGUI(controlador,getTipoIndividuos(),getNumIndividuos(),opcion);
			}
		}
	}
	
	class BackListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			
			dispose();
		}
		
	}
	
	class OptionComboListener implements ActionListener {
		
		public void actionPerformed(ActionEvent e) {
			
			Integer opcion = copciones.getSelectedIndex();
			if (opcion == 1) {
				numIndividuos.setVisible(false);
				lnumIndividuos.setVisible(false);
			}
			else {
				numIndividuos.setVisible(true);
				lnumIndividuos.setVisible(true);
			}
		}
	}
}
